<?php
namespace Controllers;

require_once('\Common\Strings.php');
require_once('\Controllers\LoginController.php');
require_once('\Models\UserCatalog.php');
require_once('\Models\User.php');
require_once('\Models\ManageUsersModel.php');
require_once('\Models\LoginModel.php');
require_once('\Models\Password.php');
require_once('\Models\UserType.php');
require_once('\Views\PageView.php');
require_once('\Views\ManageUsersView.php');
require_once('\Views\LoginView.php');

class ManageUsersController
{	
	/**
	 * Skapar kontroll för registrering av ny användare
	 * @return String $html
	 */
	public static function createControl()
	{
		$muv = new \Views\ManageUsersView();
		$db = new \Models\Database();
		$mum = new \Models\ManageUsersModel($db);
		$uc	= new \Models\UserCatalog();
		$pv	= new \Views\PageView();
		$lm	= new \Models\LoginModel();
		$lc	= new \Controllers\LoginController();
		
		$html = $lc->createControl($db, new \Views\LoginView());
		
		// Databasuppkopplingsfel om false
		if(!$html)
		{
			$html .= $pv->setStatusText(\Common\Strings::DB_CONNECTION_ERROR, false);
			return $pv->generateHTMLPage(\Common\Strings::TITLE_MANAGE_USERS, $html);
		}
		
		// Avbryt rendering av sidan om ej inloggad
		if(!$lm->IsLoggedIn())
			return $pv->generateHTMLPage(\Common\Strings::TITLE_MANAGE_USERS, $html);
		
		// Hämtar huvudmeny
		$html .= $pv->getMenu();
		
		$user = \Models\UserCatalog::getUser($db, $lm->getUserId());
		
		if(!$user->isAdmin())
		{
			$html .= $pv->setStatusText(\Common\Strings::LOGIN_RESTRICTED, false);
			return $pv->generateHTMLPage(\Common\Strings::TITLE_MANAGE_USERS, $html);
		}
			
		
		/*********************************************
		 *		 		SKAPA NY ANVÄNDARE
		 ********************************************/
			
		$html .= $pv->encapsulateString("h2", \Common\Strings::HEADER_REGISTER_USER);
		
		// Om användaren försökt skapa ny användare
		if($pv->valueIsSet($muv->tryCreateUser))
		{
			// Försök skapa användare. 0 betyder fel
			if($mum->createUser(
			\Models\UserType::PUBLIC_USER,
			$pv->getValue($pv->userName), 
			$pv->getValue($pv->firstName),
			$pv->getValue($pv->lastName),
			$pv->getValue($pv->email),
			$pv->getValue($pv->password), 
			$pv->getValue($pv->repeatPassword),
			\Models\Password::PASSWORD_LENGTH) == 0)
			{
				$html .= $pv->printErrors($mum->errors);
			}
			else
				$url = $pv->updatePage(array($pv->status),array($muv->userCreated));
		}
		// Skriv ut meddelande om ny användare har skapats
		if($muv->userCreated())
			$html .= $pv->setStatusText(\Common\Strings::DB_USER_CREATED, true);
		
		// Hämtar formulär för registrering av användare
		$html .= $muv->getRegisterForm();
		
		
		/*********************************************
		 *		 		LISTA ANVÄNDARE
		 ********************************************/
		
		$html .= $pv->encapsulateString("h2", \Common\Strings::HEADER_USERS_LIST);

		// Hämtar registrerade användare
		$allUsers = $uc->getUsers($db);
		
		// Om arrayen är av fel klass
		if (get_class($allUsers) != "Models\UserArray")
		{
			$html .= $pv->setStatusText(\Common\Strings::DB_RETURN_TYPE_ERROR, false);
			return $html;
		}
		
		// Om användaren försökte ta bort en användare
		if($pv->valueIsSet($muv->tryDeleteUser))
		{
			// Om användaren försöker ta bort sitt eget konto
			if($pv->getNumericValue($pv->userId) == $lm->getUserId())
				$html .= $pv->setStatusText(\Common\Strings::DB_USER_DELETING_SELF, false);
			
			// Om borttagningen lyckas
			else if($mum->deleteUser($pv->getNumericValue($pv->userId)))
				$url = $pv->updatePage(array($pv->status),array($muv->userDeleted));
			
			// Vid misslyckande
			else
				$html .= $pv->setStatusText(\Common\Strings::DB_USER_NOT_DELETED, false);
		}
		// Om en användare har tagits bort
		if($muv->userDeleted())
			$html .= $pv->setStatusText(\Common\Strings::DB_USER_DELETED, true);
			
		
		$html .= $muv->getUsersList($allUsers);
		
		$db->Close();
		
		// Generera HTML-sida
		return $pv->generateHTMLPage(\Common\Strings::TITLE_MANAGE_USERS, $html);
	}
}

?>